雖然之前有看過 slice / array 比較的文章,
但在寫 leetcode 時還是碰到點小麻煩,
不知道該怎麼初始化多維 slice。
var variable_name [SIZE1][SIZE2]...[SIZEN] variable_type
i.e. var mat[2][3][4][5] int
有幾個 []
就幾維,不需要自己弄 nested array。
a = [3][4]int{
{0, 1, 2, 3} , /* initializers for row indexed by 0 */
{4, 5, 6, 7} , /* initializers for row indexed by 1 */
{8, 9, 10, 11} /* initializers for row indexed by 2 */
}
雖然多維 slice 宣告也是依據 []
有幾個,
但動態分配空間的 slice 在需要指定 index 來填值時,
需要先初始化才不會 out of bound。
寫 566. Reshape the Matrix 時發現 return type 是 [][]int
如果用 input 給的 r 和 c 來初始化一個 var res [r][c]int
,
就會是一個 array 而不是 slice,因此噴錯。
目前我看到初始化多維 slice 最好的方法是用 make()
,會自動填上 int 的初始值 0,如下:
// 先做一個 r 大小的 2d slice
// 此時雖然已經宣告這個 slice 中每個元素也是一個 slice,但還沒有 make 去保留空間,因此若要存取類似 reshapedMat[0][0] 會噴錯
reshapedMat := make([][]int,r)
// reshapedMat 中每個元素都是大小為 c 的 slice
for i, _ := range mat {
reshapedMat[i] = make([]int, c)
}
[]
make
初始化,才能用 mat[0][0]
這種方法去存取並改值,不然就要用 append()
Python 雖然也要初始化才不會 out of bound,但 return 時不需要顧慮什麼...
被寵壞ㄌㄋ